/**
 * src/pages/identity/selection/index.tsx
 * ------------------------------------
 * 身份选择页面
 * 1. 提供家人身份选择：妈妈、爸爸、姐姐、弟弟、爷爷、奶奶等
 * 2. 提供朋友身份选择：闺蜜、同事、同学、邻居等
 * 3. 每个身份都有对应的图标、描述和初始亲密度
 * 4. 选择后更新用户身份信息并跳转到主页面
 * 身份选择后不可更改，不同身份解锁不同专属内容
 * 创建日期：2025-08-06
 */
import React, { useState } from 'react'
import { View, Text, Button } from '@tarojs/components'
import Taro from '@tarojs/taro'
import { identityUtils } from '../../../utils/identityUtils'
import { IdentityType } from '../../../types/identity'
import './index.scss'

/**
 * 身份选择页面组件
 * 提供家人和好友两种身份选择，每个身份都有对应的图标、描述和初始亲密度
 */
export default function IdentitySelection() {
  // 选中的身份子类型
  const [selectedIdentity, setSelectedIdentity] = useState<string>('')
  // 加载状态
  const [loading, setLoading] = useState(false)

  // 获取身份列表
  const familyIdentities = identityUtils.getFamilyIdentities()
  const friendIdentities = identityUtils.getFriendIdentities()

  /**
   * 选择身份处理函数
   * @param identitySubType 身份子类型
   */
  const handleSelectIdentity = (identitySubType: string) => {
    setSelectedIdentity(identitySubType)
  }

  /**
   * 确认选择身份
   * 更新用户身份信息并跳转到主页面
   */
  const handleConfirmSelection = async () => {
    if (!selectedIdentity) {
      Taro.showToast({
        title: '请选择一个身份',
        icon: 'none'
      })
      return
    }

    try {
      setLoading(true)
      
      // 获取身份信息
      const identityInfo = identityUtils.getIdentityInfo(selectedIdentity)
      if (!identityInfo) {
        throw new Error('身份信息不存在')
      }

      // 更新用户身份信息
      const currentUser = Taro.getStorageSync('currentUser')
      if (currentUser) {
        const updatedUser = {
          ...currentUser,
          identityType: identityInfo.type,
          identitySubType: identityInfo.subType,
          identityName: identityInfo.name,
          intimacy: identityInfo.initialIntimacy,
          intimacyLevel: identityUtils.getIntimacyLevel(identityInfo.initialIntimacy),
          lastInteractionDate: new Date()
        }

        // 保存到云数据库
        await Taro.cloud.callFunction({
          name: 'updateUserIdentity',
          data: {
            userId: currentUser.id,
            identityData: updatedUser
          }
        })

        // 更新本地存储
        Taro.setStorageSync('currentUser', updatedUser)

        Taro.showToast({
          title: `欢迎，${identityInfo.name}！`,
          icon: 'success'
        })

        // 跳转到主页面
        setTimeout(() => {
          Taro.navigateTo({
            url: '/pages/index/index'
          })
        }, 1500)
      }
    } catch (error) {
      console.error('设置身份失败:', error)
      Taro.showToast({
        title: '设置身份失败',
        icon: 'error'
      })
    } finally {
      setLoading(false)
    }
  }

  return (
    <View className='identity-selection'>
      {/* 页面标题 */}
      <View className='header'>
        <Text className='title'>选择您的身份</Text>
        <Text className='subtitle'>选择身份后可以解锁专属内容</Text>
      </View>

      {/* 家人身份选择区域 */}
      <View className='section family-section'>
        <Text className='section-title'>小魏的家人</Text>
        <Text className='section-desc'>选择家人身份，解锁专属菜品</Text>
        
        <View className='identity-grid'>
          {familyIdentities.map(identity => (
            <View 
              key={identity.subType}
              className={`identity-card ${selectedIdentity === identity.subType ? 'selected' : ''}`}
              onClick={() => handleSelectIdentity(identity.subType)}
            >
              <Text className='identity-icon'>{identity.icon}</Text>
              <Text className='identity-name'>{identity.name}</Text>
              <Text className='identity-desc'>{identity.description}</Text>
              <Text className='initial-intimacy'>初始亲密度: {identity.initialIntimacy}</Text>
            </View>
          ))}
        </View>
      </View>

      {/* 好友身份选择区域 */}
      <View className='section friend-section'>
        <Text className='section-title'>小魏的好友</Text>
        <Text className='section-desc'>选择好友身份，解锁贴图故事</Text>
        
        <View className='identity-grid'>
          {friendIdentities.map(identity => (
            <View 
              key={identity.subType}
              className={`identity-card ${selectedIdentity === identity.subType ? 'selected' : ''}`}
              onClick={() => handleSelectIdentity(identity.subType)}
            >
              <Text className='identity-icon'>{identity.icon}</Text>
              <Text className='identity-name'>{identity.name}</Text>
              <Text className='identity-desc'>{identity.description}</Text>
              <Text className='initial-intimacy'>初始亲密度: {identity.initialIntimacy}</Text>
            </View>
          ))}
        </View>
      </View>

      {/* 确认选择按钮 */}
      <View className='confirm-section'>
        {selectedIdentity && (
          <View className='selected-info'>
            <Text className='selected-text'>
              已选择: {identityUtils.getIdentityInfo(selectedIdentity)?.name}
            </Text>
          </View>
        )}
        
        <Button 
          className='confirm-btn'
          disabled={!selectedIdentity || loading}
          loading={loading}
          onClick={handleConfirmSelection}
        >
          {loading ? '设置中...' : '确认选择'}
        </Button>
      </View>

      {/* 温馨提示信息 */}
      <View className='tips'>
        <Text className='tips-title'>温馨提示：</Text>
        <Text className='tips-item'>• 身份选择后不可更改</Text>
        <Text className='tips-item'>• 不同身份解锁不同内容</Text>
        <Text className='tips-item'>• 通过互动增加亲密度</Text>
        <Text className='tips-item'>• 亲密度越高解锁内容越多</Text>
      </View>
    </View>
  )
} 